package bridging;

import java.math.BigDecimal;

/**
 * 桥接模式
 * =>JDBC中，Driver是个接口，各数据库驱动做接口实现类；
 * 最终获取的是Connection抽象对象实现，让不同的数据库都有相同的操作方法。
 * 每种数据库都有自己的实现；
 *
 * 优点：抽象和实现的分离；扩展能力强；适用于多维度划分的事物
 * 缺点：增加系统设计难度，需要抽象编程能力
 */
public class PayController {

    /**
     * 使用桥接模式
     * 直接定位某种组合，防止出现笛卡尔积的条件重叠
     *
     */
    public static void main(String[] args) {
        WxPay wxPay = new WxPay(new PayFaceMode());
        wxPay.transfer("xs","1000101",new BigDecimal(200));
    }




    /**
     * 未使用桥接模式的支付场景
     *
     * 存在不同类型的相互重合
     * @param uId
     * @param orderId
     * @param amount
     * @param channelType 支付方式
     * @param checkType 支付模型
     * @return 支付方式*支付模型，得到各种结果
     */
    public boolean doPay(String uId, String orderId, BigDecimal amount,int channelType,int checkType){
        if (channelType == 1){
            //微信支付
            if (checkType ==1){
                //指纹支付
            }else{
                //人脸识别
            }
        }else if (channelType == 2){
            //支付宝支付
            if (checkType ==1){
                //指纹支付
            }else{
                //人脸识别
            }
        }

        return false;
    }

}
